package com.yzpass.api.common.util;

import java.util.concurrent.ThreadLocalRandom;

/**
 * 随机工具类
 */
public class RandomUtil {

    // 定义可用字符集，包含字母（大小写）和数字
    private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    // 提前计算字符集长度
    private static final int CHARACTERS_LENGTH = CHARACTERS.length();

    /**
     * 随机生成 n 位字母和数字的字符串
     *
     * @param n 字符串的长度
     * @return 生成的随机字符串
     */
    public static String generateRandomString(int n) {
        if (n <= 0) {
            return "";
        }
        StringBuilder sb = new StringBuilder(n);
        // 使用 ThreadLocalRandom 生成随机数
        ThreadLocalRandom random = ThreadLocalRandom.current();
        for (int i = 0; i < n; i++) {
            // 随机选择一个字符
            int index = random.nextInt(CHARACTERS_LENGTH);
            sb.append(CHARACTERS.charAt(index));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        int n = 10; // 生成 10 位的随机字符串
        String randomString = generateRandomString(n);
        System.out.println("生成的随机字符串: " + randomString);
    }

}
